package cn.zyq.ykb.service.task;

import cn.zyq.ykb.beans.config.ConfigTaskType;
import cn.zyq.ykb.beans.pay.PayOrder;
import cn.zyq.ykb.beans.sys.SysAdmin;
import cn.zyq.ykb.beans.task.*;
import cn.zyq.ykb.beans.task.bo.*;
import cn.zyq.ykb.beans.task.dto.ClaimTaskDto;
import cn.zyq.ykb.beans.task.vo.GetTaskNumberVo;
import cn.zyq.ykb.beans.task.vo.GetTaskTypeNumberVo;
import cn.zyq.ykb.beans.task.vo.TaskTotalVo;
import cn.zyq.ykb.beans.task.vo.TaskVo;
import cn.zyq.ykb.beans.user.User;
import cn.zyq.ykb.beans.user.vo.GetUserVo;
import cn.zyq.ykb.system.common.PageParam;
import com.github.pagehelper.PageInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 任务Service接口
 *
 * @author SystemAuth
 * @date 2023-05-22
 */
public interface TaskService {
    /**
     * 查询任务
     *
     * @param taskID 任务主键
     * @param type
     * @param loginUser
     * @return 任务
     */
    Task selectTaskByTaskID(Integer taskID,Integer type, User loginUser);

    /**
     * 查询任务
     *
     * @param serviceID 任务业务ID
     * @return 任务
     */
    Task selectTaskByServiceID(String serviceID);

    /**
     * 查询任务列表
     *
     * @param pageParam
     * @param loginUser
     * @return 任务集合
     */
    PageInfo<Task> selectTaskList(PageParam pageParam, User loginUser);

    void checkPriceByUser(Task task, User user);


    List<Task> daoChu(PageParam pageParam);
    /**
     * 查询任务列表
     *
     * @param param
     * @return 任务集合
     */
    List<Task> selectTaskList(Task param);

    /**
     * 新增任务
     *
     * @param bo 任务
     * @return 结果
     */
    int insertTask(TaskAddBo bo, User loginUser);

    /**
     * 修改任务步骤
     *
     * @param bo 任务
     * @return 结果
     */
    int updateTask(TaskUptBo bo,User loginUser);

    /**
     * 批量删除任务
     *
     * @param taskIDs 需要删除的任务主键集合
     * @return 结果
     */
    int deleteTaskByTaskIDs(Integer[] taskIDs);

    /**
     * 删除任务信息
     *
     * @param taskID 任务主键
     * @return 结果
     */
    int deleteTaskByTaskID(Integer taskID);

    /**
     * 统计
     * @return
     * @param state
     * @param taskPackageID
     * @param loginUser
     */
    TaskVo selectTotal(Integer state,Integer taskPackageID,User loginUser);

    /**
     * 领取任务
     * @param dto
     * @param loginUser
     */
    MyTaskAudit claimTask(ClaimTaskDto dto, User loginUser);

    /**
     * 任务包列表
     */
    List<TaskPackage> taskPackage();

    /**
     * 任务赚列表查询
     * @param pageParam
     * @return
     */
    PageInfo<Task> packageList(PageParam pageParam);

    /**
     * 悬赏赚列表查询
     * @param pageParam
     * @return
     */
    PageInfo<Task> rewardList(PageParam pageParam);

    /**
     * 审核
     * @param param
     * @param loginAdmin
     */
    void audit(TaskAuditBo param, SysAdmin loginAdmin);

    /**
     * 我的发布列表
     * @param pageParam
     * @param loginUser
     * @return
     */
    PageInfo<Task> publishing(PageParam pageParam, User loginUser);

    /**
     * 开始任务
     * @param task
     * @param loginUser
     * @return
     */
    int upTask(Task task, User loginUser);

    /**
     * 暂停任务
     * @param task
     * @param loginUser
     * @return
     */
    int downTask(Task task, User loginUser);

    /**
     * 修改数量/修改价格数据
      * @param taskID
     * @param loginUser
     */
    Task getUptTask(Integer taskID, User loginUser);

    /**
     * 发布任务审批
     * @param param
     * @param loginAdmin
     */
    void auditTask(TaskAuditBo param, SysAdmin loginAdmin);

    /**
     * 领取任务
     * @param taskID
     * @param type
     * @param loginUser
     */
    MyTask neckTask(Integer taskID,Integer type, User loginUser);

    /**
     * 首页统计
     * @param configTaskType
     * @param loginUser
     * @return
     */
    TaskVo statistics(ConfigTaskType configTaskType,User loginUser);

    /**
     * 根据条件查询任务包任务
     * @param bo
     * @return
     */
    List<Task> selectByName(TaskPackageBo bo);

    /**
     * 移除任务包
     * @param bo
     * @return
     */
    int removePackage(RemovePackageBo bo, SysAdmin admin);

    /**
     * 管理端列表展示
     * @param pageParam
     * @param admin
     * @return
     */
    PageInfo<Task> selectAllList(PageParam pageParam,SysAdmin admin);

    /**
     * 管理端新增
     * @param bo
     * @param loginAdmin
     * @return
     */
    int addTask(MgtTaskAddBo bo, SysAdmin loginAdmin);

    /**
     * 管理端修改
     * @param bo
     * @return
     */
    int uptTask(MgtTaskAddBo bo, SysAdmin loginAdmin);

    /**
     * 我的发布列表
     * @param pageParam
     * @return
     */
    PageInfo<Task> releaseList(PageParam pageParam,User user);

    /**
     * 我的发布详情
     * @param taskID
     * @return
     */
    Task publishingDetail(Integer taskID);

    /**
     * 根据任务ID查询领取列表
     * @param pageParam
     * @return
     */
    PageInfo<MyTask> getMyTask(PageParam pageParam);

    /**|
     * 屏蔽信息列表
     * @param pageParam
     * @param loginUser
     * @return
     */
    PageInfo<Task> getList(PageParam pageParam, User loginUser);

    /**
     * 屏蔽/恢复任务
     * @param taskIDs
     * @param loginUser
     * @return
     */
    int shield(Integer[] taskIDs, User loginUser);

    /**
     * 添加进任务包
     * @param bo
     * @param admin
     * @return
     */
    int addTaskPackage(AddTaskPackageBo bo,SysAdmin admin);

    /**
     * 推广订单列表
     * @param pageParam
     * @param loginUser
     * @return
     */
    PageInfo<MyTask> getPromotionList(PageParam pageParam, User loginUser);

    /**
     * 修改价格
     * @param bo
     * @param loginUser
     * @return
     */
    Task uptPrice(UptPriceBo bo, User loginUser);

    /**
     * 修改数量
     * @param bo
     * @param loginUser
     * @return
     */
    Task uptNumber(UptNumberBo bo, User loginUser);

    /**
     * 任务下单
     * @param pageParam
     * @param request
     * @param loginUser
     * @return
     */
    TaskOrder taskOrder(Task pageParam, HttpServletRequest request, User loginUser);

    /**
     * 支付回调
     *
     * @param payOrder
     */
    void payNotify(PayOrder payOrder);

    /**
     * 推广统计
     * @return
     * @param loginUser
     */
    TaskTotalVo tgTotal(User loginUser);

    /**
     * 任务结束处理
     * @param serviceID
     */
    void checkExpire(String serviceID);

    /**
     * 任务列表
     * @param pageParam
     * @return
     */
    PageInfo<Task> taskListAll(PageParam pageParam);

    /**
     *
     * @param state
     * @param loginUser
     * @return
     */
    TaskVo taskListTotal(Integer state, User loginUser);


    void reloadStateQueue();

    /**
     * 获取发布任务数量
     * @return
     */
    GetTaskNumberVo getTaskNumber();

    /**
     * 任务类型统计
     * @return
     * @param admin
     */
    List<GetTaskTypeNumberVo> getTaskTypeNumber(SysAdmin admin);

    /**
     * 获取一周订单统计
     * @param time
     * @return
     */
    List<GetUserVo> getRegisterNumber(String time);

    Task selectTaskByTaskIDMgt(Integer taskID, User loginUser);

    PageInfo<MyTaskAudit> getMyTaskAudit(PageParam pageParam,SysAdmin admin);

    int check(String productName);

    MyTaskAudit tgDetail(Integer myTaskID);

    int screen(List<Integer> taskIDs, SysAdmin loginUser);

    int restore(List<Integer> taskIDs, SysAdmin loginSysAdmin);

    int batchTop(TaskTopBo bo, SysAdmin loginSysAdmin);

    int batchFall(TaskTopBo bo, SysAdmin loginSysAdmin);

    PageInfo<MyTaskAudit> getMyTaskAuditXS(PageParam pageParam, SysAdmin loginSysAdmin);

    int uptTaskPrice(UptTaskPriceBo bo, User loginUser);



//    MyTaskAudit claim(ClaimTaskDto dto, User loginUser);
}
